diff --git a/.gitignore b/.gitignore index 4acafde1..92e90094 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 @@ -408,3 +411,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 +#test \ No newline at end of file diff --git a/doc/Readme.md b/doc/Readme.md index 402477c8..94a496de 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,39 +1,32 @@ # Documentación -> Introduzca sus datos (de todo el equipo) en la siguiente tabla: +> La siguiente tabla contiene los datos del equipo: **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 +> El informe escrito del compilador se encuentra en la carpeta `report` de este directorio -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: +## Uso del Compilador -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. +Para instalar todas las dependencias del compilador ejecute desde el directorio raiz del proyecto -### Sobre los Equipos de Desarrollo +```bash +pip install -r requirements.txt +``` -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. +Para ejecutar el compilador debe moverse al directorio ```src```, y ejecutar el archivo ```cool.sh``` dando como entrada la direccion del archivo a compilar -### Sobre los Materiales a Entregar +```bash +cd src/ +./cool.sh '../tests/codegen/hello_world.cl' +``` -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. +En caso que no tenga `bash` puede ejecutar directamente el script `main.py` que contiene el proceso de compilacion mediante el pipeline -### 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 00000000..d92bcf96 Binary files /dev/null and b/doc/report/report.pdf differ diff --git a/doc/report/report.tex b/doc/report/report.tex new file mode 100644 index 00000000..58cc304a --- /dev/null +++ b/doc/report/report.tex @@ -0,0 +1,199 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Journal Article +% LaTeX Template +% Version 1.4 (15/5/16) +% +% This template has been downloaded from: +% http://www.LaTeXTemplates.com +% +% Original author: +% Frits Wenneker (http://www.howtotex.com) with extensive modifications by +% Vel (vel@LaTeXTemplates.com) +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\documentclass{article} + +\usepackage{blindtext} % Package to generate dummy text throughout this template + +\usepackage[sc]{mathpazo} % Use the Palatino font +\usepackage[T1]{fontenc} % Use 8-bit encoding that has 256 glyphs +\linespread{1.05} % Line spacing - Palatino needs more space between lines +\usepackage{microtype} % Slightly tweak font spacing for aesthetics + +\usepackage[english]{babel} % Language hyphenation and typographical rules + +\usepackage[hmarginratio=1:1,top=32mm,columnsep=20pt]{geometry} % Document margins +\usepackage[hang, small,labelfont=bf,up,textfont=it,up]{caption} % Custom captions under/above floats in tables or figures +\usepackage{booktabs} % Horizontal rules in tables + +\usepackage{lettrine} % The lettrine is the first enlarged letter at the beginning of the text + +\usepackage{enumitem} % Customized lists +\setlist[itemize]{noitemsep} % Make itemize lists more compact + +\usepackage{abstract} % Allows abstract customization +\renewcommand{\abstractnamefont}{\normalfont\bfseries} % Set the "Abstract" text to bold +\renewcommand{\abstracttextfont}{\normalfont\small\itshape} % Set the abstract itself to small italic text + +\usepackage{titlesec} % Allows customization of titles +\titleformat{\section}[block]{\large\scshape\centering}{\thesection.}{1em}{} % Change the look of the section titles +\titleformat{\subsection}[block]{\large\scshape\centering}{\thesubsection.}{1em}{} % Change the look of the section titles + +\usepackage{fancyhdr} % Headers and footers +\pagestyle{fancy} % All pages have headers and footers +\fancyhead{} % Blank out the default header +\fancyfoot{} % Blank out the default footer +\fancyfoot[RO,LE]{\thepage} % Custom footer text + +\usepackage{titling} % Customizing the title section +\usepackage{listings} +\usepackage{hyperref} % For hyperlinks in the PDF + +%listings definitions +\lstset{language=Python} +\lstset{frame=lines} +\lstset{basicstyle=\footnotesize} + +%---------------------------------------------------------------------------------------- +% TITLE SECTION +%---------------------------------------------------------------------------------------- + +\setlength{\droptitle}{-4\baselineskip} % Move the title up + +\pretitle{\begin{center}\Huge\bfseries} % Article title formatting +\posttitle{\end{center}} % Article title closing formatting +\title{Reporte de Compilaci\'on} % Article title +\author{% +\textsc{Oscar Luis Hernandez Solano}\\ % Your name +\textsc{Harold Rosales Hernandez} \\ % Second author's name +\textsc{Carlos Rafael Ortega Lezcano} +%\normalsize University of Utah \\ % Second author's institution +%\normalsize \href{mailto:jane@smith.com}{jane@smith.com} % Second author's email address +} +\date{Grupo - C411} % Leave empty to omit a date +\renewcommand{\maketitlehookd}{% +} +%---------------------------------------------------------------------------------------- + +\begin{document} + +% Print the title +\maketitle + +%---------------------------------------------------------------------------------------- +% ARTICLE CONTENTS +%---------------------------------------------------------------------------------------- + +\section{Uso del Compilador} + +Para instalar todas las dependencias del compilador se debe emplear el archivo \verb|requirements.txt|, y la instalaci\'on debe ser mediante pip haciendo: \verb|pip install -r requirements.txt|. Para ejecutar el compilador se debe estar en la carpeta \verb|./src| y ejecutar el \verb|cool.sh| recibiendo como entrada la direcci\'on del archivo \verb|.cl| a compilar. En caso que no tenga forma de correr el archivo \verb|.sh|, entonces puede ejecutarse usando el archivo principal del compilador \verb|main.py|, es requerido \verb|Python 3| para correr el compilador: \verb|python3 main.py | 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 defini\'o nuestro \verb|Lexer| para los programas escritos en Cool este es \verb|CoolLexer| (algunas caracter\'isticas de su implementaci\'on ser\'an abordadas m\'as adelante), este 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 m\'odulo 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 permiti\'o eliminar algunas estructuras complejas de llevar a bajo nivel como por ejemplo: let o case. Se implement\'o una jerarqu\'ia 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 implementaci\'on esta en el m\'odulo \verb|nodes_il| en la carpeta de \verb|code_generation|. Se definieron tambien m\'odulos 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 transpilaci\'on, para lograr dicho proceso se implement\'o un patr\'on 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}, as\'i 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} + +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 +\end{thebibliography} + +%---------------------------------------------------------------------------------------- + +\end{document} 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 diff --git a/src/cl_ast/__init__.py b/src/cl_ast/__init__.py new file mode 100644 index 00000000..3b6f17dd --- /dev/null +++ b/src/cl_ast/__init__.py @@ -0,0 +1,8 @@ +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 * +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..be011e8e --- /dev/null +++ b/src/cl_ast/astNode.py @@ -0,0 +1,5 @@ +class ASTNode(object): + 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 new file mode 100644 index 00000000..57eb0ba5 --- /dev/null +++ b/src/cl_ast/declarations.py @@ -0,0 +1,51 @@ +from .astNode import ASTNode + +class ClassDeclarationNode(ASTNode): + def __init__(self, row, col, idx, features, parent = "Object"): + super().__init__(row, col) + self.id = idx + self.parent = parent + self.features = self._sort_features(features) + self.parent_pos = (0, 0) + + def _sort_features(self, features): + sort_f = [] + fmeth = [] + fattr = [] + for f in features: + if isinstance(f, AttrDeclarationNode): + fattr.append(f) + else: + fmeth.append(f) + return fattr + fmeth + +class AttrDeclarationNode(ASTNode): + def __init__(self, row, col, idx, typex, expr=None): + super().__init__(row, col) + 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): + super().__init__(row, col) + self.id = idx + 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): + 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/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 diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py new file mode 100644 index 00000000..5418477c --- /dev/null +++ b/src/cl_ast/expressions/complex_exprs.py @@ -0,0 +1,100 @@ +from .exprNode import ExpressionNode + +#Atomic +class VariableNode(ExpressionNode): + def __init__(self, row, col, idx): + super().__init__(row, col) + self.id = idx + +class NewNode(ExpressionNode): + def __init__(self, row, col, typex): + super().__init__(row, col) + self.type = typex + +#Exprs + +class ConditionalNode(ExpressionNode): + 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, row, col, cond, expr): + super().__init__(row, col) + self.cond = cond + self.expr = expr + +class LetNode(ExpressionNode): + def __init__(self, row, col, init_list, expr): + super().__init__(row, col) + self.init_list = init_list + self.expr = 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 + self.type_pos = (0, 0) + +class BlockNode(ExpressionNode): + def __init__(self, row, col, expr_list): + super().__init__(row, col) + self.expr_list = expr_list + +class CaseNode(ExpressionNode): + def __init__(self, row, col, expr, case_list): + super().__init__(row, col) + self.expr = expr + self.case_list = case_list + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + 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, row, col, idx, expr): + super().__init__(row, col) + self.id = idx + self.expr = expr + +class IsVoidNode(ExpressionNode): + def __init__(self, row, col, expr): + super().__init__(row, col) + self.expr = expr + +#Dispatch + +class ExprCallNode(ExpressionNode): #CallNode + 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, row, col, idx, args): + super().__init__(row, col) + self.id = idx + self.args = args + + +class ParentCallNode(ExpressionNode): #BaseCallNode + def __init__(self, row, col, obj, typex, idx, args): + super().__init__(row, col) + self.obj = obj + self.id = idx + self.args = args + self.type = typex diff --git a/src/cl_ast/expressions/constant.py b/src/cl_ast/expressions/constant.py new file mode 100644 index 00000000..23a14bc5 --- /dev/null +++ b/src/cl_ast/expressions/constant.py @@ -0,0 +1,15 @@ +from .exprNode import ExpressionNode + +class ConstantNode(ExpressionNode): + def __init__(self, row, col, lex): + super().__init__(row, col) + 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..26717675 --- /dev/null +++ b/src/cl_ast/expressions/operations.py @@ -0,0 +1,52 @@ +from .exprNode import ExpressionNode + +class OperationNode(ExpressionNode): + pass + +class BinaryOperationNode(OperationNode): + def __init__(self, row, col, left, right): + super().__init__(row, col) + self.left = left + self.right = right + +class UnaryOperationNode(OperationNode): + def __init__(self, row, col, expr): + super().__init__(row, col) + self.expr = expr + +#Binaries + +class BinaryArithOperationNode(BinaryOperationNode): + pass + +class SumNode(BinaryArithOperationNode): + pass + +class DiffNode(BinaryArithOperationNode): + pass + +class StarNode(BinaryArithOperationNode): + pass + +class DivNode(BinaryArithOperationNode): + pass + +class BinaryLogicalOperationNode(BinaryOperationNode): + pass + +class LessNode(BinaryLogicalOperationNode): + pass + +class LessEqualNode(BinaryLogicalOperationNode): + pass + +class EqualNode(BinaryLogicalOperationNode): + pass + +#Unaries + +class BitNotNode(UnaryOperationNode): + pass + +class NotNode(UnaryOperationNode): + pass \ 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..fd02434b --- /dev/null +++ b/src/cl_ast/program.py @@ -0,0 +1,7 @@ +from .astNode import ASTNode + +class ProgramNode(ASTNode): + def __init__(self, row, col, declarations): + super().__init__(row, col) + 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/coollexer.py b/src/cl_lexer/coollexer.py new file mode 100755 index 00000000..cf361186 --- /dev/null +++ b/src/cl_lexer/coollexer.py @@ -0,0 +1,234 @@ +""" Lexer module for COOL Language """ + +from pipeline import State +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): + super().__init__(name) + self.lexer = lex.lex(module=self, **kwargs) + self.balance = 0 + + def input(self, raw): + return self.lexer.input(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 = [] + 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(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos), "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(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(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') + else: + pass + + def t_str_eof(self, t): + self.errors.append(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos), "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]*" + pass + + # Track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + + # Ignored characters + t_ignore = ' \t\r\f' + + #Error handling rule + def t_error(self, t): + 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' + t.lexer.skip(1) + return t \ 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/coolparser.py b/src/cl_parser/coolparser.py new file mode 100644 index 00000000..0e302dc1 --- /dev/null +++ b/src/cl_parser/coolparser.py @@ -0,0 +1,298 @@ +# Get the token map from the lexer +from cl_ast import * +from cl_lexer.coollexer import CoolLexer +from pipeline import State +from tools.utils import find_column +from tools.cmp_errors import SyntacticError +import ply.yacc as yacc + +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 run(self, raw): + ast = self.parser.parse(raw, lexer=self.lexer.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(0, 0, 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.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(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): + '''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.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[5]) + except: + 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''' + 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): + '''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] = FormalParamNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), 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.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2], p[4]) + elif p[1].lower() == 'case': + 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(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(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''' + 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): + '''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 : ID COLON TYPEID ASSIGN expr + | ID COLON TYPEID''' + try: + p[0] = LetDeclarationNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[5]) + except: + 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 + + 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.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[5]) + + # Arith Operations + # ------------------- + + # Operators Precedence + precedence = ( + ('right', 'NOT'), + ('nonassoc', 'LESS', 'LESSQ', 'EQUALS'), + ('left', 'PLUS', 'MINUS'), + ('left', 'STAR', 'DIVIDE'), + ('right', 'ISVOID'), + ('right', 'BITNOT'), + ) + + # 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.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) + elif p[2] == '-': + p[0] = DiffNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) + elif p[2] == '*': + p[0] = StarNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) + elif p[2] == '<': + p[0] = LessNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqualNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), 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.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) + elif p[1].lower() == 'isvoid': + p[0] = IsVoidNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) + elif p[1].lower() == 'not': + 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''' + p[0] = p[1] + + # Function Call Rules + + def p_basecall(self, p): # Parent Call (Review) + '''base_call : fact ARROBA TYPEID DOT ID LPAREN arg_list RPAREN + | fact''' + try: + p[0] = ParentCallNode(p.lineno(5), find_column(p.lexer.lexdata, p.lexpos(5)), p[1], p[3], p[5], p[7]) + except: + p[0] = p[1] + + def p_factcall(self, p): + '''fact : fact DOT ID LPAREN arg_list RPAREN + | ID LPAREN arg_list RPAREN''' + try: + p[0] = ExprCallNode(p.lineno(3), find_column(p.lexer.lexdata, p.lexpos(3)), p[1], p[3], p[5]) + except: + 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''' + 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.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1]) + + def p_atom_id(self, p): + '''atom : ID''' + 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''' + 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''' + p[0] = BlockNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), 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.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1]) + + def p_atom_string(self, p): + '''atom : STRING''' + p[0] = StringNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), 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(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/cl_parser/parsetab.py b/src/cl_parser/parsetab.py new file mode 100644 index 00000000..e6038ca5 --- /dev/null +++ b/src/cl_parser/parsetab.py @@ -0,0 +1,89 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_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,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(): + 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,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(): + 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','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), + ('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/code_generation/__init__.py b/src/code_generation/__init__.py new file mode 100644 index 00000000..e41bcde0 --- /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.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 new file mode 100644 index 00000000..a2f22b77 --- /dev/null +++ b/src/code_generation/nodesIL/allocate_node_il.py @@ -0,0 +1,13 @@ +from .node_il import * + +class AllocateNodeIL(InstructionNodeIL): + def __init__(self, itype, name, dest, idx=None): + super().__init__(idx) + self.type = itype + self.name = name + self.dest = dest + + self.out = dest + + 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 new file mode 100644 index 00000000..84b482b9 --- /dev/null +++ b/src/code_generation/nodesIL/assignmet_node_il.py @@ -0,0 +1,13 @@ +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__(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 new file mode 100644 index 00000000..36c00189 --- /dev/null +++ b/src/code_generation/nodesIL/instruction_node_il.py @@ -0,0 +1,370 @@ +from .operation_node_il import * + +class NotNodeIL(UnaryNodeIL): + + def __str__(self): + return ("{} = ~{}".format(self.dest, self.expr)) + +class LogicalNotNodeIL(UnaryNodeIL): + def __str__(self): + return ("{} = NOT {}".format(self.dest, self.expr)) +class PlusNodeIL(BinaryNodeIL): + def __str__(self): + return ("{} = {} + {}".format(self.dest,self.left, self.right)) + +class MinusNodeIL(BinaryNodeIL): + def __str__(self): + return ("{} = {} - {}".format(self.dest,self.left, self.right)) +class StarNodeIL(BinaryNodeIL): + def __str__(self): + return ("{} = {} * {}".format(self.dest,self.left, self.right)) + +class DivNodeIL(BinaryNodeIL): + def __str__(self): + return ("{} = {} / {}".format(self.dest,self.left, self.right)) + +class LessNodeIL(BinaryNodeIL): + def __str__(self): + return ("{} = {} < {}".format(self.dest,self.left, self.right)) + +class LessEqNodeIL(BinaryNodeIL): + def __str__(self): + return ("{} = {} <= {}".format(self.dest,self.left, self.right)) + +class EqualNodeIL(BinaryNodeIL): + def __str__(self): + 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, value, typex, idx=None): + super().__init__(idx) + self.obj = obj + self.attr = attr + + self.value = value + self.attr_type = typex + + self.out = obj + self.in1 = value + + def __str__(self): + return ("SETATTR {} {} = {}".format(self.obj,self.attr, self.value)) + +class GetAttribNodeIL(InstructionNodeIL): + def __init__(self, dest, obj, attr, 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__(self): + 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__(self): + return ("{} = TYPEOF {}".format(self.dest,self.obj)) + +class LabelNodeIL(InstructionNodeIL): + def __init__(self, label, idx=None): + super().__init__(idx) + self.label = label + + def __str__(self): + return ("LABEL {}".format(self.label)) + + +class GotoNodeIL(InstructionNodeIL): + def __init__(self, label, idx=None): + super().__init__(idx) + self.label = label + def __str__(self): + 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__(self): + 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__(self): + return ("IF NOT {} GOTO {}".format(self.cond,self.label)) + +class StaticCallNodeIL(InstructionNodeIL): + 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.out = dest + + def __str__(self): + 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, 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.obj = obj + + self.out = dest + self.in1 = obj + + 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)) + +class ArgNodeIL(InstructionNodeIL): + def __init__(self, name, idx=None): + super().__init__(idx) + self.dest = name + self.out = name + + def __str__(self): + return f"ARG {self.dest}" + +class ReturnNodeIL(InstructionNodeIL): + def __init__(self, value, idx=None): + super().__init__(idx) + self.value = value + + self.out = value + + def __str__(self): + to_return = "" + if self.value is not None: + to_return = " " + str(self.value) + return "RETURN" + to_return + +class LoadNodeIL(InstructionNodeIL): + def __init__(self, msg, dest, idx=None): + super().__init__(idx) + self.dest = dest + self.msg = msg + + self.out = dest + + def __str__(self): + return ("{} = LOAD {}".format(self.dest, self.msg)) + +class LengthNodeIL(InstructionNodeIL): + def __init__(self, arg, dest, idx=None): + super().__init__(idx) + self.dest = dest + self.arg = arg + + self.out = dest + self.in1 = arg + + def __str__(self): + return ("{} = LENGTH {}".format(self.dest, self.arg)) + +class ConcatNodeIL(InstructionNodeIL): + 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 + + def __str__(self): + return ("{} = CONCAT {} {}".format(self.dest, self.arg1, self.arg2)) + +class StringEqualsNodeIL(InstructionNodeIL): + def __init__(self, s1, s2, result): + self.s1 = s1 + self.s2 = s2 + self.result = result + +class SubstringNodeIL(InstructionNodeIL): + def __init__(self, begin, end, word, dest, 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__(self): + 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__(self): + 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__(self): + 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__(self): + 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__(self): + 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__(self): + 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__(self): + return ("EXIT {}".format(self.value)) + +class CopyNodeIL(InstructionNodeIL): + def __init__(self, source, dest, idx=None): + super().__init__(idx) + self.dest = dest + self.source = source + + self.out = dest + self.in1 = source + + def __str__(self): + 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__(self): + 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__(self): + return ("{} = Void".format(self.obj)) + +class ErrorNodeIL(InstructionNodeIL): + def __init__(self, typex, idx=None): + super().__init__(idx) + self.type = typex + + def __str__(self): + 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 + +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 new file mode 100644 index 00000000..a14cbaaf --- /dev/null +++ b/src/code_generation/nodesIL/node_il.py @@ -0,0 +1,89 @@ + +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__(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) + + 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__(self): + 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__(self): + 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__(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) + + 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=None, idx=None): + self.name = name + self.type = typex + self.index = idx + + def __str__(self): + return ("PARAM {}".format(self.name)) + +class LocalNodeIL(NodeIL): + def __init__(self, name, idx=None): + self.name = name + self.index = idx + + def __str__(self): + return ("LOCAL {}".format(self.name)) + +class HaltNodeIL(NodeIL): + + def __str__(self): + return 'HALT;' + +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 new file mode 100644 index 00000000..cf5faf7d --- /dev/null +++ b/src/code_generation/nodesIL/operation_node_il.py @@ -0,0 +1,22 @@ +from .node_il import * + +class BinaryNodeIL(InstructionNodeIL): + def __init__(self, dest, left, right, idx=None): + super().__init__(idx) + self.dest = dest + self.left = left + self.right = right + self.op = idx + 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.op = idx + self.expr = expr + + self.in1 = expr + self.out = dest \ No newline at end of file diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s new file mode 100644 index 00000000..133d4b54 --- /dev/null +++ b/src/code_generation/statics/IO.s @@ -0,0 +1,75 @@ +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 \ 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..afa4a981 --- /dev/null +++ b/src/code_generation/statics/Object.s @@ -0,0 +1,36 @@ +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 diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s new file mode 100644 index 00000000..8171e160 --- /dev/null +++ b/src/code_generation/statics/String.s @@ -0,0 +1,129 @@ + +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: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +lw $a2, -12($sp) +add $a2, $a2, $a1 +_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: +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 \ 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..d02c3959 --- /dev/null +++ b/src/code_generation/statics/inherit.s @@ -0,0 +1,16 @@ +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 diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py new file mode 100644 index 00000000..3c3b72f2 --- /dev/null +++ b/src/code_generation/variables.py @@ -0,0 +1,43 @@ +class Variables: + + def __init__(self): + self.stack = {} + self.vars = [] + + def add_var(self, name): + self.stack[name] = len(self.stack) + 1 + self.vars.append(name) + + def id(self, name): + if not name in self.stack: + self.add_var(name) + return int(len(self.stack) - self.stack[name] + 1) + + def pop_var(self): + if not len(self.vars): + self.stack.pop(self.vars[-1]) + self.vars.pop() + + def add_temp(self): + name = len(self.stack) + 1 + self.add_var(str(name)) + return str(name) + + def peek_last(self): + # print(self.vars) + return int(self.vars[-1]) + + def get_stack(self): + stack = '|' + for v in self.stack: + stack += 'id: ' + str(self.id(v) ) + 'name :' + v + '|' + return stack + + 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/code_generation/virtual_table.py b/src/code_generation/virtual_table.py new file mode 100644 index 00000000..230c5887 --- /dev/null +++ b/src/code_generation/virtual_table.py @@ -0,0 +1,70 @@ +class VirtualTable: + + def __init__(self): + self.classes = {} + self.methods = {} + self.attributes = {} + + 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)) + 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 not differs: + add = False + if add: + self.methods[A].append((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] = [] + self.attributes[claSS].append(args.name) + + 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 + built_in = ['Object','Int', 'IO', 'Bool', 'String'] + if not rec: + 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: + return ret + return -1 + + def get_attributes(self, claSS): + return self.attributes[claSS] + + def get_attributes_id(self, claSS, attr): + attrs = self.attributes[claSS] + for i in range(len(attrs)): + if attr == attrs[i]: + return i + 1 + return -1 + + + diff --git a/src/coolc.sh b/src/coolc.sh index 3088de4f..a3f28c09 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 +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" +#echo "Compiling $INPUT_FILE into $OUTPUT_FILE" + +python3 main.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..039e3250 --- /dev/null +++ b/src/main.py @@ -0,0 +1,43 @@ +from pipeline import Pipeline +from tools.reader import Reader +from cl_lexer import CoolLexer +from cl_parser import CoolParser +from visitors import * + +import sys + +def main(): + program = sys.argv[1] + + pipeline = Pipeline() + + pipeline.submit_state(Reader('Reader')) + pipeline.submit_state(CoolParser('Parser')) + pipeline.submit_state(TypeCollector('TCollector')) + pipeline.submit_state(TypeBuilder('TBuilder')) + pipeline.submit_state(VarCollector('VCollector')) + pipeline.submit_state(TypeChecker('TChecker')) + + ast, context, scope = None, None, None + try: + ast, context, scope = pipeline.run_pipeline(program) + except: + pass + + pipeline.report_errors() + + if pipeline.pipeline_errors: + exit(1) + else: + cv = codeVisitor(context) + cil_ast = cv.visit(ast, None, scope) + + mips = MIPS() + code = mips.visit(cil_ast) + path = program[:-2] + path += 'mips' + f = open(path, "w+") + f.write(code) + +if __name__ == "__main__": + main() \ 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..5ee4e2f6 --- /dev/null +++ b/src/pipeline/pipeline.py @@ -0,0 +1,24 @@ +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, inputx): + self.pipeline_errors.clear() # clean old errors + + res = inputx + for state in self.states: + res = state.run(res) + self.pipeline_errors = state.errors + + if self.pipeline_errors: + break + + 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/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..073705f3 --- /dev/null +++ b/src/semantic/context.py @@ -0,0 +1,220 @@ +"""Contains Context Structures""" + +import itertools as itt +import pprint +from .types import * +from .error import * +from .features import * +from tools.cmp_errors import * + +class Context: + def __init__(self): + self.types = { + 'String': StringType(), + 'Int' : IntType(), + 'Object' : ObjectType(), + 'Bool' : BoolType(), + 'IO' : IOType(), + 'SELF_TYPE' : SELF_TYPE() + } + self.graph = {} + + # 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['Object']) # Must be ret type 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']) + + 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.') + typex = Type(name) + self.types[name] = typex + 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 + + def get_type(self, name:str): + try: + return self.types[name] + except KeyError: + raise ContextError(f'Type "{name}" is not defined.') + + def set_type_tags(self, node='Object', tag=0): + self.types[node].tag = tag + for i,t in enumerate(self.graph[node]): + self.set_type_tags(t, tag + i + 1) + + 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 + + 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: + """ Defines the global scope using a given context """ + + def __init__(self, context=None): + self.context = context + self.cls_scopes = { } + + if context: + 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' + 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 """ + + 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() } + 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) + + def is_innerScope(self): + return False + + 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' + for aname, s in self.attr_scopes.items(): + res += f'{aname}: {str(s)}\n' + return res + + def __repr__(self): + return str(self) + +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 = 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) + 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) + except StopIteration: + 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.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) + + def is_innerScope(self): + return True + + def is_class_scope(self): + return False + + 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/error.py b/src/semantic/error.py new file mode 100644 index 00000000..7859d78a --- /dev/null +++ b/src/semantic/error.py @@ -0,0 +1,16 @@ +""" 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] + +class ScopeError(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/semantic/types.py b/src/semantic/types.py new file mode 100644 index 00000000..111fcaad --- /dev/null +++ b/src/semantic/types.py @@ -0,0 +1,211 @@ +"""Contains Definitions for Semantic Types""" + +from .error import SemanticError +from .features import * +from tools.utils import Singleton + +class Type: + def __init__(self, name:str): + if name == 'ObjectType': + return ObjectType() + self.name = name + 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: + 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 not self.parent: + 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 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') + + 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 not self.parent: + 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 == '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}') + + 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 + + def conforms_to(self, other): + return self == other or self.parent is not None and self.parent.conforms_to(other) + + 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 SELF_TYPE(Type): + def __init__(self): + Type.__init__(self, 'SELF_TYPE') + + # not check conforms with self_type + 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, '') + + 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, 'Void') + + 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, metaclass=Singleton): + def __init__(self): + Type.__init__(self, 'String') + + self.methods = { } + + 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 IOType(Type, metaclass=Singleton): + def __init__(self): + Type.__init__(self, 'IO') + + self.methods = { } + + 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, 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) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, ObjectType) \ No newline at end of file diff --git a/src/tools/__init__.py b/src/tools/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/tools/cmp_errors.py b/src/tools/cmp_errors.py new file mode 100644 index 00000000..08806968 --- /dev/null +++ b/src/tools/cmp_errors.py @@ -0,0 +1,65 @@ +#(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.' +FORMAL_ERROR_SELF = '"self" identifier cannot be used as formal parameter' +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".' +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 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 CTypeError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, TYPE_ERR, message) + +class CAttributeError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, ATTRIBUTE_ERR, message) \ No newline at end of file diff --git a/src/tools/reader.py b/src/tools/reader.py new file mode 100644 index 00000000..b966e5c5 --- /dev/null +++ b/src/tools/reader.py @@ -0,0 +1,14 @@ +from tools.cmp_errors import CompilerError +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(CompilerError(0, 0, 'Missing input file')) + self.stop = True # stop pipeline \ No newline at end of file diff --git a/src/tools/utils.py b/src/tools/utils.py new file mode 100644 index 00000000..ef79067a --- /dev/null +++ b/src/tools/utils.py @@ -0,0 +1,21 @@ +# 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 + +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 diff --git a/src/visitors/__init__.py b/src/visitors/__init__.py new file mode 100644 index 00000000..0c8d65cf --- /dev/null +++ b/src/visitors/__init__.py @@ -0,0 +1,7 @@ +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 +from .transpilator import codeVisitor, get_formatter +from .to_mips import MIPS \ 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..5fe78c2a --- /dev/null +++ b/src/visitors/format_visitor.py @@ -0,0 +1,146 @@ +import visitors.visitor as visitor +from pipeline import State +from cl_ast import * + +class FormatVisitor(State): + def __init__(self, sname, fname): + super().__init__(sname) + self.fname = fname + + def run(self, ast): + printed_ast = self.visit(ast) + f = open(self.fname, 'w') + f.write(printed_ast) + f.close() + return ast + + # 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 ({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 ({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.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.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.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.row},{node.col}){node.__class__.__name__}: {node.lex}' + + @visitor.when(BinaryOperationNode) + def visit(self, node, tabs=0): + 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.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.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 ({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 ({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) + 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 ({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} ({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__} ({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 ({node.row},{node.col}): new {node.type}()' + + @visitor.when(VariableNode) + def visit(self, node, tabs=0): + 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 ({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}' + + @visitor.when(ParentCallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + 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.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.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/to_mips.py b/src/visitors/to_mips.py new file mode 100644 index 00000000..18655036 --- /dev/null +++ b/src/visitors/to_mips.py @@ -0,0 +1,557 @@ +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): + 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' + + @visitor.on('node') + def visit(self, node): + pass + + @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' + + 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'addi $sp, $sp, {-4 * len(node.localvars)}\n' + + 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' + total = 4 * len(node.localvars) + 4 * len(node.params) + 4 + self.text += f'addi $sp, $sp, {total}\n' + self.text += 'jr $ra\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 + + idx = 0 + self.method_offset.__setitem__(node.name, {}) + for met in node.methods: + self.method_offset[node.name][met] = 4*idx + idx = idx + 1 + + + @visitor.when(AssignNodeIL) + def visit(self, node): + offset = self.var_offset[self.current_function.name][node.dest] + if node.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: + self.text += f'la $t1, void\n' + + self.text += f'sw $t1, {offset}($sp)\n' + + + @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' + + 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' + self.text += f'sw $t1, 4($t0)\n' + self.text += f'li $t1, {amount}\n' + self.text += f'sw $t1, 8($t0)\n' + 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' + + @visitor.when(ParamNodeIL) + def visit(self, node): + pass + + @visitor.when(LocalNodeIL) + def visit(self, node): + pass + + @visitor.when(GetAttribNodeIL) + def visit(self, node): + self_offset = self.var_offset[self.current_function.name][node.obj] + 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' + + result_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t1, {result_offset}($sp)\n' + + @visitor.when(SetAttribNodeIL) + def visit(self, node): + self_offset = self.var_offset[self.current_function.name][node.obj] + self.text += f'lw $t0, {self_offset}($sp)\n' + + if node.value: + 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' + + attr_offset = self.attr_offset[node.attr_type][node.attr] + self.text += f'sw $t1, {attr_offset}($t0)\n' + + + @visitor.when(ArgNodeIL) + def visit(self, node): + 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): + 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' + self.text += 'la $t0, void\n' + self.text += 'beq $t1, $t0, dispatch_void_error\n' + + 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' + + 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.text += 'move $t0, $sp\n' + for arg in node.args: + self.visit(arg) + + self.text += f'jal {node.function}\n' + + 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): + 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' + + @visitor.when(CaseNodeIL) + def visit(self, node): + 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(BinaryNodeIL) + def visit(self, node): + 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' + 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.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(OutStringNodeIL) + def visit(self, node): + 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(ReadIntNodeIL) + def visit(self, node): + 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(ReadStringNodeIL) + def visit(self, node): + 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' + + 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' + 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' + self.text += 'li $t1, 0\n' + self.text += 'lb $t1, 0($t0)\n' + 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' + self.text += 'sb $0, 0($t0)\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): + 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' + 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(HaltNodeIL) + def visit(self, node): + self.text += 'li $v0, 10\n' + self.text += 'syscall\n' + + @visitor.when(TypeOfNodeIL) + def visit(self, node): + 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(IsVoidNodeIL) + def visit(self, node): + 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): + self_offset = self.var_offset[self.current_function.name][node.source] + 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' + + 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' + 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] + + self.text += f'sw $v0, {offset}($sp)\n' + + @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' + 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' + + @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] + + self.text += f'lw $a0, {offset_len1}($sp)\n' + self.text += f'lw $t0, {offset_len2}($sp)\n' + + self.text += 'add $a0, $a0, $t0\n' + 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' + + self.text += f'lw $t0, {offset_arg1}($sp)\n' + self.text += f'lw $t1, {offset_arg2}($sp)\n' + + self.text += 'copy_arg1_char:\n' + 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' + + self.text += 'concat_arg2_char:\n' + 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' + + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t3, {offset}($sp)\n' + + @visitor.when(SubstringNodeIL) + def visit(self, node): + 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] + + self.text += f'lw $a0, {offset_len}($sp)\n' + 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 += 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' + + self.text += 'li $a0, 0\n' + self.text += 'jump_str_char:\n' + 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' + self.text += 'move $t3, $v0\n' + + + self.text += 'copy_substr_char:\n' + 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' + 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' + + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t3, {offset}($sp)\n' + + @visitor.when(StringEqualsNodeIL) + def visit(self, node): + 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' + + + self.text += 'compare_str_char:\n' + 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' \ No newline at end of file diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py new file mode 100644 index 00000000..b9a65e77 --- /dev/null +++ b/src/visitors/transpilator.py @@ -0,0 +1,1567 @@ +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): + 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.count = '' + # self.scope = scope + # tag context types + self.context.tag_types() + 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}' + + 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').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)) + + #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').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)) + + #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').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)) + + # ----------------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').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)) + + #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').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)) + + + #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').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)) + + #----------------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, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope, sscope): + + 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').tag, 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) + + #Add string equals function + self.build_string_equals_function(scope) + + for klass in node.declarations: + self.visit(klass, scope.create_child(), sscope.cls_scopes[klass.id]) + + 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) + self.count += 'SelfCall \n-------------------\n'+ node.id + '(' + str(node.args)+')' + '--------\n ' + result_local = self.define_internal_local(scope = scope, name = "result") + 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)) + + # dynamic_type = 'Void' + self.count += expr_value + '\n' + + # 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, expr_value)) + + return result_local + + @visitor.when(FormalParamNode) + def visit(self, node, scope, sscope): + pass + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope, sscope): + 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')) + # 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 + + for feature in func_declarations: + self.visit(feature, scope.create_child(), sscope) + + self.current_type = None + + @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) + self.current_function = self.register_function(cil_method_name) + + self.register_param(VariableInfo('self', self.current_type)) + for p in node.params: + self.register_param(VariableInfo(p.id, p.type)) + + value = self.visit(node.body, scope, fscope) + + self.register_instruction(ReturnNodeIL(value)) + self.current_method = None + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope, sscope): + ascope = sscope.attr_scopes[node.id] + + if not node.expr: + 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, ascope) + 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)) + + @visitor.when(AssignNode) + 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) + + 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 + + @visitor.when(BlockNode) + 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): + # 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=self.current_type.name) + # self.count += 1 + self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.id, self.current_type.name)) + return result_local + else: + return scope.find_cil_local(node.id) + + @visitor.when(ConditionalNode) + def visit(self, node, scope, sscope): + result_local = self.define_internal_local(scope=scope, name = "result") + + cond_value = self.visit(node.cond, scope, sscope) + + if_then_label = self.get_label() + 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() + self.register_instruction(GotoNodeIL(end_if_label)) + + 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)) + + return result_local + + @visitor.when(WhileNode) + 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, sscope) + self.register_instruction(GotoIfNodeIL(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, sscope) + self.register_instruction(GotoNodeIL(loop_init_label)) + self.register_instruction(LabelNodeIL(loop_end_label)) + + self.register_instruction(LoadNodeIL(None, result_local)) + return result_local + + @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) + + 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 = self.define_internal_local(scope= scope, name="dyn_type") + # self.register_instruction(TypeOfNodeIL(expr_value, dynamic_type)) + + # for arg in call_args: + # 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) + + 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)) + + # for p in call_args: + # 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).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 + + @visitor.when(LetNode) + 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, iscope) + iscope = iscope.children[0] + + 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): + # 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 + + # 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, 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() + label = self.get_label() + + self.register_instruction(CaseNodeIL(case_expr, label)) + + tag_lst = [] + option_dict = {} + for option, c_scp in zip(node.case_list, nscope.children): + 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] + 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() + 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)) + + self.register_instruction(LabelNodeIL(label)) + self.register_instruction(GotoNodeIL('case_no_match_error')) + self.register_instruction(LabelNodeIL(exit_label)) + return result_local + + @visitor.when(OptionNode) + def visit(self, node, scope, sscope): + pass + + @visitor.when(NewNode) + 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('ID:', node.id) + print('type:', node.type) + + 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).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 )) + + return result_local + + @visitor.when(IsVoidNode) + 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") + 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 + + @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") + right_local = self.define_internal_local(scope=scope, name = "right") + + 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])) + 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.count += 1 + 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])) + else: + right_type = 'Int' + 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.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)) + # 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 Int result + 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")) + + return result_local + + @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") + right_local = self.define_internal_local(scope=scope, name = "right") + + 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)) + + 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.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): + 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').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")) + + return result_local + + @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") + right_local = self.define_internal_local(scope=scope, name = "right") + + 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)) + + # 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.count += f'({left_local},{right_local})' + 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(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 + 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")) + + return result_local + + @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") + right_local = self.define_internal_local(scope=scope, name = "right") + + 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)) + + 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.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): + 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').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")) + + return result_local + + @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) + + expr_value = self.visit(node.expr, 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 = 'Int' + if isinstance(node, SelfCallNode): + typeX = self.current_type.name + else: + try: + 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' + 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.count += 1 + 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').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")) + + return result_local + + @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) + + expr_value = self.visit(node.expr, 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 = 'Int' + if isinstance(node, SelfCallNode): + typeX = self.current_type.name + else: + try: + typeX = self.context.exprs_dict[node.expr].name + except: + 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)) + self.register_instruction(UnaryNodeIL(op_local, expr_local, "not")) + + # Allocate Bool result + 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 + + @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") + right_local = self.define_internal_local(scope=scope, name = "right") + + 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)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) + # 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].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' + 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].name)) + else: + right_type = 'Int' + 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').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 + + @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") + right_local = self.define_internal_local(scope=scope, name = "right") + + 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)) + + # 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].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' + 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].name)) + else: + right_type = 'Int' + 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').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 + + @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") + 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, sscope) + right_value = self.visit(node.right, scope, sscope) + # 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) + # 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 + # else: + # 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')) + print('Got string equals') + + # Allocate Bool result + 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 (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)) + if hasattr(node.left, 'expr'): + 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): + 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].name)) + else: + right_type = 'Int' + 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('---------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)) + + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "=")) + + # Allocate Bool result + 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 + + @visitor.when(ConstantNode) + def visit(self, node, scope, sscope): + 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, sscope): + instance = self.define_internal_local(scope=scope, 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") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(value),ArgNodeIL(instance)], "Int")) + return instance + + @visitor.when(StringNode) + def visit(self, node, scope, sscope): + 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').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 + + @visitor.when(BoolNode) + def visit(self, node, scope, sscope): + boolean = 0 + 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") + 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 + + +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 new file mode 100644 index 00000000..935a5c8a --- /dev/null +++ b/src/visitors/type_builder.py @@ -0,0 +1,161 @@ +from semantic import * + +import visitors.visitor as visitor +from pipeline import State +from cl_ast import * +from tools.cmp_errors import * + +class TypeBuilder(State): + def __init__(self, name): + super().__init__(name) + + def run(self, inputx): + 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): + 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 + + @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: + 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(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')) + + self.current_type.set_parent(parent) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + args_ids = [] + args_types = [] + for param in node.params: + args_ids.append(param.id) + try: + args_types.append(self.context.get_type(param.type)) + except ContextError as e: + args_types.append(ErrorType()) + self.errors.append(CTypeError(param.row, param.col, e.text)) + try: + ret_type = self.context.get_type(node.type) + except ContextError as e: + ret_type = ErrorType() + 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: + self.errors.append(CSemanticError(node.row, node.col, e.text)) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + attr_type = self.context.get_type(node.type) + except ContextError as e: + attr_type = ErrorType() + 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: + self.errors.append(CSemanticError(node.row, node.col, 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 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.type_pos[1], WRONG_SIGNATURE % (node.id, parent.name))) + + except SemanticError: + pass + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + parent = self.current_type.parent + + try: + pattr = parent.get_attribute(node.id) + if pattr: + 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 new file mode 100644 index 00000000..60aeeb2d --- /dev/null +++ b/src/visitors/type_checker.py @@ -0,0 +1,364 @@ +from semantic import * + +import visitors.visitor as visitor +from pipeline import State +from cl_ast import * + +class TypeChecker(State): + def __init__(self, name): + super().__init__(name) + self.context = None + self.current_type = None + self.current_method = None + + def run(self, inputx): + ast, context, scope = inputx + self.context = context + self.context.exprs_dict = {} + self.visit(ast, scope) + return ast, context, scope + + def _get_type(self, node, typex): + try: + return self.context.get_type(typex) + except ContextError as e: + self.errors.append(CTypeError(node.row, node.col, e.text)) + return ErrorType() + + 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(CAttributeError(node.row, node.col, e.text)) + return MethodError(name, [], [], ErrorType()) + + 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(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(CSemanticError(node.row, node.col, MISSING_PARAMETER % (arg, meth.name))) + + for arg, atype, ptype in zip(args, arg_types, meth.param_types): + if not atype.conforms_to(ptype): + self.errors.append(CTypeError(arg.row, arg.col, INCOMPATIBLE_TYPES % (ptype.name, atype.name))) + + def _join_types(self, ltypes): + + def path_to_objet(typex): + path = [] + c_type = typex + + while c_type: + path = [c_type] + path + c_type = c_type.parent + + return path + + paths = [path_to_objet(typex) for typex in ltypes] + tuples = zip(*paths) + + jtype = None + + for t in tuples: + nxt = t[0] + if all(nxt == l for l in t): + jtype = nxt + + return jtype + + # Visitor Functions + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope): + 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: + self.visit(feature, 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, 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() + return etype + + try: + return self.context.get_type(node.type) + except: + return ErrorType() + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + fscope = scope.func_scopes[node.id] + parent = self.current_type.parent + + self.current_method = meth = self.current_type.get_method(node.id) + + res = self.visit(node.body, fscope) + + if not res.conforms_to(meth.return_type): + 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): + vinfo = scope.find_variable(node.id) + vtype = vinfo.type + + 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 + + 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) + 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))) + + return rtype + + @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) + return meth.return_type + + @visitor.when(ParentCallNode) + def visit(self, node, scope): + otype = self.visit(node.obj, scope) + ptype = self._get_type(node, node.type) + + if not otype.conforms_to(ptype): + self.errors.append(CTypeError(node.obj.row, node.obj.col, INCOMPATIBLE_TYPES % (otype.name, ptype.name))) + return ErrorType() + + 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(node, stype, node.id) + self._check_args(node, 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(CTypeError(node.cond.row, node.cond.col, INCORRECT_TYPE %(ctype.name, 'Bool'))) + + self.visit(node.expr, scope) + + return ObjectType() + + @visitor.when(ConditionalNode) + 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'))) + + 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) + self.context.exprs_dict[node.expr] = etype + new_scope = scope.expr_dict[node] + + 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) + self.context.exprs_dict[node.expr] = typex + return typex, var_info.type + + @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, iscope) + iscope = iscope.children[0] + + etype = self.visit(node.expr, iscope) + self.context.exprs_dict[node.expr] = etype + return etype + + @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) + 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 + + return vtype + + @visitor.when(BinaryArithOperationNode) + 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() + + return IntType() + + @visitor.when(LessEqualNode) + 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() + + return BoolType() + + @visitor.when(LessNode) + 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() + + return BoolType() + + @visitor.when(EqualNode) + 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}')) + + return BoolType() + + @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() + + return BoolType() + + @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() + + return IntType() + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + etype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = etype + 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, 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 new file mode 100644 index 00000000..a47d942f --- /dev/null +++ b/src/visitors/type_collector.py @@ -0,0 +1,30 @@ +from semantic import * + +import visitors.visitor as visitor +from pipeline import State +from cl_ast import * + +class TypeCollector(State): + def __init__(self, name): + super().__init__(name) + self.context = Context() + + def run(self, ast): + 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): + try: + self.context.create_type(node.id) + except ContextError as e: + 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 new file mode 100644 index 00000000..68aebb02 --- /dev/null +++ b/src/visitors/var_collector.py @@ -0,0 +1,184 @@ +from semantic import * +from tools.cmp_errors import * + +import visitors.visitor as visitor +from pipeline import State +from cl_ast import * + +class VarCollector(State): + 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 + 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(context=self.context) + for dec in node.declarations: + 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) + + # visit features + for feature in node.features: + self.visit(feature, scope) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + 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): + self.current_method = self.current_type.get_method(node.id) + func_scope = scope.func_scopes[node.id] + + for param in node.params: + try: + if param.id == 'self': + raise ScopeError(FORMAL_ERROR_SELF) + func_scope.define_variable(param.id, self.context.get_type(param.type)) + except ScopeError as e: + 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(CSemanticError(node.row, node.col, 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 ScopeError as e: + scope.define_variable(node.id, ErrorType()) + self.errors.append(CSemanticError(node.row, node.col, e.text)) + + if node.expr is not None: + self.visit(node.expr, scope) + + @visitor.when(AssignNode) + def visit(self, node, scope): + vinfo = scope.find_variable(node.id) + if vinfo.name == 'self': + self.errors.append(CSemanticError(node.row, node.col, SELF_IS_READONLY)) + + if vinfo is None: + 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) + + @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() + scope.expr_dict[node] = new_scope + + iscope = new_scope + + for init in node.init_list: + 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 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)) + + if node.expr is not None: + self.visit(node.expr, scope) + + @visitor.when(VariableNode) + def visit(self, node, scope): + if not scope.is_defined(node.id): + 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) + 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): + try: + typex = self.context.get_type(node.typex) + except ContextError as e: + self.errors.append(CTypeError( node.row, node.col, e.text)) + typex = ErrorType() + + scope.define_variable(node.id, typex) + self.visit(node.expr, scope) + + @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 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) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 00000000..612ccfd8 --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,10269 @@ +.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 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 7 +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, 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, 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, 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, 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, 8 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 10 +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, 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, 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, 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, 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, 10 +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, 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, 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, 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, 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, 6 +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, 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, 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, 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, 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, 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, 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, 10 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 6 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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) +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 10 label_77 +bgt $t1 10 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, 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, 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 10 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, 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, 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, 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, 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 10 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, 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, 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 10 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, 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, 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 10 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, 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, 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, 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, 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, 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, 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, 6 +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_42 +sw $t0, 28($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, 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_43 +sw $t0, 68($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, 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, 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, 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_45 +sw $t0, 136($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, 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_46 +sw $t0, 176($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, 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_47 +sw $t0, 216($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, 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_48 +sw $t0, 256($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, 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_49 +sw $t0, 296($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, 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_50 +sw $t0, 336($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, 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_51 +sw $t0, 376($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, 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_52 +sw $t0, 416($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, 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_53 +sw $t0, 456($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, 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_54 +sw $t0, 496($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, 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, 6 +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, 6 +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, 10 +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, 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, 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, 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, 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, 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, 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, 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, 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_55 +sw $t0, 688($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, 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, 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, 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, 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, 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, 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, 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, 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, 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_42 +sw $t0, 800($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, 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_57 +sw $t0, 824($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, 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, 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, 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_58 +sw $t0, 864($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, 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, 8 +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, 8 +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, 8 +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, 7 +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, 8 +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, 6 +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, 6 +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, 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, 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 8 label_111 +bgt $t1 8 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 6 label_112 +bgt $t1 10 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 10 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 +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, 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, 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, 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, 6 +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, 7 +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 new file mode 100644 index 00000000..eb25a833 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,4454 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 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, 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, 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_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, 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, 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_2 +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, 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, 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_3 +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, 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, 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_4 +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, 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, 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_5 +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, 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) +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_6 +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, 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, 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_7 +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, 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, 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_8 +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, 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, 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_9 +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, 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, 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_10 +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, 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, 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_11 +label_10: +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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_21 +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, 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_22 +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, 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_23 +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, 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_24 +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, 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_25 +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, 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_26 +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, 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_27 +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, 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_28 +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, 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_29 +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, 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_30 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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_41 +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, 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, 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, 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, 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, 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_42 +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, 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, 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, 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, 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, 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_43 +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, 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, 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, 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, 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, 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, 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_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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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_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, 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, 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, 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, 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_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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_48 +b label_49 +label_48: +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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: +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, 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, 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_50 +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, 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_51 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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_54 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 44($sp) +li $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, 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, 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, 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, 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..5fbe8f5e --- /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 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" +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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) +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 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, 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, 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, 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) +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) +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 $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 6 label_3 +bgt $t1 6 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, 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, 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 5 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, 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, 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) +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 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) +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 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 Object_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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 8 +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..1db5e0b4 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,2355 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 12($sp) +li $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, 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, 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, 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) +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 44($sp) +li $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, 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, 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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_3 +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, 84($sp) +li $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, 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, 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, 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, 104($sp) +li $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, 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, 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, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 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) +lw $t0, 60($sp) +lw $a0, 16($t0) +bnez $a0, label_5 +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, 96($sp) +li $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, 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, 108($sp) +li $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, 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, 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, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 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) +lw $t0, 124($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, 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, 160($sp) +li $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, 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, 172($sp) +li $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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 192($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, 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, 228($sp) +li $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, 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, 240($sp) +li $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, 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, 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, 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, 256($sp) +li $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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_11 +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, 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, 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, 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, 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, -128 +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, 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, 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, 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, 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, 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, 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, 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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_14 +b label_15 +label_14: +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($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, 52($t2) +jal $t3 +sw $a1, 72($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, 40($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) +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, 96($sp) +li $t0, 1 +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, 16($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) +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, 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, 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, 108($sp) +lw $t1, 80($sp) +sw $t1, 16($sp) +b label_13 +label_15: +lw $t0, 132($sp) +lw $t1, 40($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) +sw $t1, 128($sp) +lw $a1, 128($sp) +lw $ra, 0($sp) +addi $sp, $sp, 136 +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 $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, 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, 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, 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, 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, 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) +li $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, 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, 76($sp) +li $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) +lw $t0, 60($sp) +lw $a0, 16($t0) +bnez $a0, label_17 +b label_18 +label_17: +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, 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, 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, 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, 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, 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, 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: +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/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..b906427f --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,1537 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 16($sp) +li $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, 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, 28($sp) +li $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 $t1, 64($sp) +sw $t1, 56($sp) +lw $t1, 72($sp) +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_1 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 76($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_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, 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, 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, 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, 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, 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, 36($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, 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, 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, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 36($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, 80($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, 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, 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, 80($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 80($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, 36($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, 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, 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, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 36($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, 36($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, 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, 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, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 36($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/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 00000000..945cc8d5 --- /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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 20($sp) +li $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, 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, 36($sp) +li $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, 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, 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 $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) +lw $t0, 56($sp) +lw $a0, 16($t0) +bnez $a0, label_2 +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, 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, 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, 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, 144($sp) +li $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, 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, 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: +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..c6250ab7 --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,5444 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 24($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, 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) +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) +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, 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, 28 +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, -24 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 28($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, 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, 28($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, 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, 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, 32 +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, 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, 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, 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, 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, 20($sp) +li $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, 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, 32($sp) +li $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, 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, 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, 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, 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, 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, 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) +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 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, 8 +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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_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, 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, 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) +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 $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) +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 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, 9 +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, 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, 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) +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 $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, -24 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +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 +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, 16($sp) +la $t0, empty_str +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 String_init +sw $a1, 24($sp) +lw $t0, 28($sp) +lw $t1, 16($sp) +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 32 +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, 6 +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, 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, 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, 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, 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) +lw $t0, 28($sp) +lw $a0, 16($t0) +bnez $a0, label_4 +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: +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, 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, 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, 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, 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, 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, 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, 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) +lw $t0, 28($sp) +lw $a0, 16($t0) +bnez $a0, label_7 +b label_8 +label_7: +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, 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, 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, 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: +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, 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, 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_9 +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, 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, 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_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, 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, 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_11 +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, 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, 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_12 +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, 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, 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_13 +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, 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) +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_14 +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, 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, 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_15 +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, 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, 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_16 +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, 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, 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_17 +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, 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, 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_18 +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, 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, 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_19 +label_18: +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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_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, 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, 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_29 +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, 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, 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, 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_17 +sw $t0, 92($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, 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_30 +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, 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, 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, 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_18 +sw $t0, 156($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, 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_31 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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_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, 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, 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, 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, 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, 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_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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_36 +b label_37 +label_36: +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, 72($sp) +li $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, 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, 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) +lw $t0, 92($sp) +lw $a0, 16($t0) +bnez $a0, label_38 +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, 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, 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) +lw $t0, 128($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, 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, 192($sp) +li $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, 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, 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, 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, 216($sp) +li $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, 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, 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, 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, 252($sp) +li $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, 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, 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) +lw $t0, 276($sp) +lw $a0, 16($t0) +bnez $a0, label_40 +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, 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, 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, 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, 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, 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, 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, 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, 368($sp) +li $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, 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, 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, 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, 400($sp) +li $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, 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, 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, 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, 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, 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, 468($sp) +li $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, 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, 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, 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, 500($sp) +li $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, 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, 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: +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, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Parse_init +sw $a1, 4($sp) +move $a1, $zero +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, 16 +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, 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, 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 Object_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) +lw $t0, 24($sp) +lw $a0, 16($t0) +bnez $a0, label_44 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +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 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) +lw $t0, 24($sp) +lw $a0, 16($t0) +bnez $a0, label_46 +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) +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 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..b222bc4d --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,1710 @@ +.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, 6 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 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, 124($sp) +sw $t1, 16($sp) +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, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bar_init +sw $a1, 24($sp) +lw $t1, 20($sp) +sw $t1, 8($sp) +b label_1 +label_4: +blt $t1 6 label_5 +bgt $t1 8 label_5 +lw $t1, 124($sp) +sw $t1, 28($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, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Razz_init +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 $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, 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, 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, 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, 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, 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, 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, 28($sp) +lw $t1, 28($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, 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, 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, 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, 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 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, 144($sp) +sw $t1, 16($sp) +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, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bar_init +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 $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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 8 label_12 +bgt $t1 8 label_12 +lw $t1, 68($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, 68($sp) +sw $t1, 28($sp) +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, 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 $t1, 32($sp) +sw $t1, 20($sp) +b label_10 +label_13: +blt $t1 6 label_14 +bgt $t1 8 label_14 +lw $t1, 68($sp) +sw $t1, 40($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, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($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 8 label_15 +lw $t1, 68($sp) +sw $t1, 52($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, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Foo_init +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 $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, 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, 12($sp) +li $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, 28($sp) +lw $t1, 28($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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 new file mode 100644 index 00000000..35a172d4 --- /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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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/io.mips b/tests/codegen/io.mips new file mode 100644 index 00000000..c68a1e21 --- /dev/null +++ b/tests/codegen/io.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 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, -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 Object_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +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, 20 +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, 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, 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, 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, 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, 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, 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, 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, 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, 6 +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, 7 +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, 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, 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, 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, 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, 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, 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..89d2da74 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,10563 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 20($sp) +li $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, 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, 32($sp) +li $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, 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, 32($sp) +li $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) +lw $t0, 16($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, 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, 68($sp) +li $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) +lw $t0, 52($sp) +lw $a0, 16($t0) +bnez $a0, label_2 +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, 104($sp) +li $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) +lw $t0, 88($sp) +lw $a0, 16($t0) +bnez $a0, label_3 +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, 140($sp) +li $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) +lw $t0, 124($sp) +lw $a0, 16($t0) +bnez $a0, label_4 +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, 176($sp) +li $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) +lw $t0, 160($sp) +lw $a0, 16($t0) +bnez $a0, label_5 +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, 212($sp) +li $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) +lw $t0, 196($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, 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, 228($sp) +li $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, 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, 244($sp) +li $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, 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, 264($sp) +li $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, 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, 280($sp) +li $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, 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, 300($sp) +li $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, 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, 316($sp) +li $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, 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, 336($sp) +li $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, 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, 352($sp) +li $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, 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, 372($sp) +li $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, 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, 388($sp) +li $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, 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, 408($sp) +li $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, 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, 424($sp) +li $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, 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, 444($sp) +li $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, 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, 460($sp) +li $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, 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, 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, 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, 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, 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, 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, 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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_14 +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, 116($sp) +move $t0, $sp +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, 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, 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, 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, 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, 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, s_3 +sw $t0, 132($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, 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, 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, 44($sp) +li $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, 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, 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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_16 +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, 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, 72($sp) +li $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, 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, 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, 84($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 84($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, 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, 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, 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, 48($sp) +li $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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_18 +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, 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, 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, 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, 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, 76($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 76($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, 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, 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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_20 +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, 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, 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, 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, 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, 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, 72($sp) +li $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, 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, 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, 96($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 96($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, 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, 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, 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, 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, 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, 120($sp) +li $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, 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, 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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_22 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_24 +lw $t0, 172($sp) +lw $t1, 20($t0) +sw $t1, 100($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 100($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, 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, 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, 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, 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) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_25 +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, 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) +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, 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, 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, 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, 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, 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, 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, 124($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 124($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, 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, 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, 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, 48($sp) +li $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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_28 +lw $t0, 196($sp) +lw $t1, 20($t0) +sw $t1, 124($sp) +lw $t0, 200($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) +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, 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, 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, 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, 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) +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_29 +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, 156($sp) +li $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, 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, 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, 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, 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, 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, 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, 156($sp) +lw $t0, 264($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 156($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, 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, 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, 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, 48($sp) +li $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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_32 +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, 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) +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, 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, 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, 156($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 156($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, 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, 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, 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, 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, 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, 180($sp) +li $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, 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, 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) +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_33 +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, 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) +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, 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, 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, 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, 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, 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, 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, 148($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 148($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, 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, 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) +lw $t0, 8($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, 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, 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, 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, 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, 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, 148($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $t0, 148($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, 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, 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, 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, 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, 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, 172($sp) +li $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, 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, 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) +lw $t0, 60($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, 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, 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 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, 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, 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, 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, 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, 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, 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, 116($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 116($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, 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, 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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_40 +lw $t0, 188($sp) +lw $t1, 20($t0) +sw $t1, 116($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $t0, 116($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, 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, 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, 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, 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) +lw $t0, 60($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, 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, 148($sp) +li $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, 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, 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, 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, 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, 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, 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, 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, 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, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 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) +lw $t0, 120($sp) +lw $a0, 16($t0) +bnez $a0, label_44 +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, 156($sp) +li $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, 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, 168($sp) +li $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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 184($sp) +lw $a0, 16($t0) +bnez $a0, label_46 +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, 220($sp) +li $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, 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, 232($sp) +li $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, 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, 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, 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, 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, 268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 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) +lw $t0, 252($sp) +lw $a0, 16($t0) +bnez $a0, label_48 +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, 288($sp) +li $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, 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, 300($sp) +li $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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 320($sp) +lw $a0, 16($t0) +bnez $a0, label_50 +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, 356($sp) +li $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, 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, 368($sp) +li $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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 388($sp) +lw $a0, 16($t0) +bnez $a0, label_52 +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, 424($sp) +li $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, 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, 436($sp) +li $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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 456($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, 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, 492($sp) +li $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, 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, 504($sp) +li $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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 524($sp) +lw $a0, 16($t0) +bnez $a0, label_56 +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, 560($sp) +li $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, 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, 572($sp) +li $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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 592($sp) +lw $a0, 16($t0) +bnez $a0, label_58 +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, 628($sp) +li $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, 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, 640($sp) +li $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, 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, 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, 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, 28($sp) +li $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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_60 +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, 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, 68($sp) +li $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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_61 +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, 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, 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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 100($sp) +lw $a0, 16($t0) +bnez $a0, label_63 +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, 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, 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, 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, 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, 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, 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, -128 +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, 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, 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, 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, 44($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, 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, 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, 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_67 +b label_68 +label_67: +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($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, 88($t2) +jal $t3 +sw $a1, 72($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, 40($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) +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, 96($sp) +li $t0, 1 +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, 16($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) +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, 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, 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, 108($sp) +lw $t1, 80($sp) +sw $t1, 16($sp) +b label_66 +label_68: +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, 124($sp) +lw $t1, 124($sp) +sw $t1, 128($sp) +lw $a1, 128($sp) +lw $ra, 0($sp) +addi $sp, $sp, 136 +jr $ra +CellularAutomaton.option: +addi $sp, $sp, -1432 +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, 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, 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, 24($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, 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, 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, 20($sp) +la $t0, s_8 +sw $t0, 40($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, 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, 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, 36($sp) +la $t0, s_9 +sw $t0, 56($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, 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, 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, 52($sp) +la $t0, s_10 +sw $t0, 72($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, 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, 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, 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, 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, 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, 84($sp) +la $t0, s_12 +sw $t0, 104($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, 108($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 112($sp) +move $t0, $sp +lw $t1, 108($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, 100($sp) +la $t0, s_13 +sw $t0, 120($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, 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) +move $t0, $sp +lw $t1, 124($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, 116($sp) +la $t0, s_14 +sw $t0, 136($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, 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, 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, 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, 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, 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, 148($sp) +la $t0, s_16 +sw $t0, 168($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, 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, 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, 164($sp) +la $t0, s_17 +sw $t0, 184($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, 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) +move $t0, $sp +lw $t1, 188($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, 180($sp) +la $t0, s_18 +sw $t0, 200($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, 204($sp) +move $t0, $sp +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 208($sp) +move $t0, $sp +lw $t1, 204($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, 196($sp) +la $t0, s_19 +sw $t0, 216($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, 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, 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, 212($sp) +la $t0, s_20 +sw $t0, 232($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, 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, 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, 228($sp) +la $t0, s_21 +sw $t0, 248($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, 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, 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, 244($sp) +la $t0, s_22 +sw $t0, 264($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, 268($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 272($sp) +move $t0, $sp +lw $t1, 268($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, 260($sp) +la $t0, s_23 +sw $t0, 280($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, 284($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 288($sp) +move $t0, $sp +lw $t1, 284($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, 276($sp) +la $t0, s_24 +sw $t0, 296($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, 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, 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, 292($sp) +la $t0, s_25 +sw $t0, 312($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, 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, 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, 308($sp) +la $t0, s_26 +sw $t0, 328($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, 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, 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, 324($sp) +la $t0, s_27 +sw $t0, 344($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, 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, 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, 340($sp) +la $t0, s_28 +sw $t0, 360($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, 364($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($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, 364($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, 356($sp) +la $t0, s_29 +sw $t0, 376($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, 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, 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, 372($sp) +move $t0, $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, 24($t2) +jal $t3 +sw $a1, 388($sp) +lw $t1, 388($sp) +sw $t1, 16($sp) +la $t0, s_3 +sw $t0, 400($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, 404($sp) +move $t0, $sp +lw $t1, 400($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 408($sp) +move $t0, $sp +lw $t1, 404($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, 396($sp) +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, 432($sp) +li $t0, 1 +sw $t0, 436($sp) +move $t0, $sp +lw $t1, 436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 440($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 424($sp) +lw $t0, 432($sp) +lw $t1, 16($t0) +sw $t1, 428($sp) +lw $a0, 424($sp) +lw $t1, 428($sp) +seq $a0, $a0, $t1 +sw $a0, 420($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 416($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 Bool_init +sw $a1, 444($sp) +lw $t0, 416($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, 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, 468($sp) +li $t0, 2 +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, 16($sp) +lw $t1, 16($t0) +sw $t1, 460($sp) +lw $t0, 468($sp) +lw $t1, 16($t0) +sw $t1, 464($sp) +lw $a0, 460($sp) +lw $t1, 464($sp) +seq $a0, $a0, $t1 +sw $a0, 456($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 452($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 Bool_init +sw $a1, 480($sp) +lw $t0, 452($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, 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, 504($sp) +li $t0, 3 +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 $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 496($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 500($sp) +lw $a0, 496($sp) +lw $t1, 500($sp) +seq $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, 516($sp) +lw $t0, 488($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, 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, 540($sp) +li $t0, 4 +sw $t0, 544($sp) +move $t0, $sp +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 540($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 548($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 532($sp) +lw $t0, 540($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, 552($sp) +lw $t0, 524($sp) +lw $a0, 16($t0) +bnez $a0, label_72 +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, 576($sp) +li $t0, 5 +sw $t0, 580($sp) +move $t0, $sp +lw $t1, 580($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 576($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 584($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 568($sp) +lw $t0, 576($sp) +lw $t1, 16($t0) +sw $t1, 572($sp) +lw $a0, 568($sp) +lw $t1, 572($sp) +seq $a0, $a0, $t1 +sw $a0, 564($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 560($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 Bool_init +sw $a1, 588($sp) +lw $t0, 560($sp) +lw $a0, 16($t0) +bnez $a0, label_73 +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, 612($sp) +li $t0, 6 +sw $t0, 616($sp) +move $t0, $sp +lw $t1, 616($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 612($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 620($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 604($sp) +lw $t0, 612($sp) +lw $t1, 16($t0) +sw $t1, 608($sp) +lw $a0, 604($sp) +lw $t1, 608($sp) +seq $a0, $a0, $t1 +sw $a0, 600($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 596($sp) +move $t0, $sp +lw $t1, 600($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 596($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 624($sp) +lw $t0, 596($sp) +lw $a0, 16($t0) +bnez $a0, label_74 +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, 648($sp) +li $t0, 7 +sw $t0, 652($sp) +move $t0, $sp +lw $t1, 652($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 648($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 656($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 640($sp) +lw $t0, 648($sp) +lw $t1, 16($t0) +sw $t1, 644($sp) +lw $a0, 640($sp) +lw $t1, 644($sp) +seq $a0, $a0, $t1 +sw $a0, 636($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 632($sp) +move $t0, $sp +lw $t1, 636($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 632($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 660($sp) +lw $t0, 632($sp) +lw $a0, 16($t0) +bnez $a0, label_75 +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, 684($sp) +li $t0, 8 +sw $t0, 688($sp) +move $t0, $sp +lw $t1, 688($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 684($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 692($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 676($sp) +lw $t0, 684($sp) +lw $t1, 16($t0) +sw $t1, 680($sp) +lw $a0, 676($sp) +lw $t1, 680($sp) +seq $a0, $a0, $t1 +sw $a0, 672($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 668($sp) +move $t0, $sp +lw $t1, 672($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 696($sp) +lw $t0, 668($sp) +lw $a0, 16($t0) +bnez $a0, label_76 +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, 720($sp) +li $t0, 9 +sw $t0, 724($sp) +move $t0, $sp +lw $t1, 724($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 720($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 728($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 712($sp) +lw $t0, 720($sp) +lw $t1, 16($t0) +sw $t1, 716($sp) +lw $a0, 712($sp) +lw $t1, 716($sp) +seq $a0, $a0, $t1 +sw $a0, 708($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 704($sp) +move $t0, $sp +lw $t1, 708($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 704($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 732($sp) +lw $t0, 704($sp) +lw $a0, 16($t0) +bnez $a0, label_77 +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, 756($sp) +li $t0, 10 +sw $t0, 760($sp) +move $t0, $sp +lw $t1, 760($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 756($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 764($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 748($sp) +lw $t0, 756($sp) +lw $t1, 16($t0) +sw $t1, 752($sp) +lw $a0, 748($sp) +lw $t1, 752($sp) +seq $a0, $a0, $t1 +sw $a0, 744($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 740($sp) +move $t0, $sp +lw $t1, 744($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 740($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 768($sp) +lw $t0, 740($sp) +lw $a0, 16($t0) +bnez $a0, label_78 +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, 792($sp) +li $t0, 11 +sw $t0, 796($sp) +move $t0, $sp +lw $t1, 796($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 792($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 800($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 784($sp) +lw $t0, 792($sp) +lw $t1, 16($t0) +sw $t1, 788($sp) +lw $a0, 784($sp) +lw $t1, 788($sp) +seq $a0, $a0, $t1 +sw $a0, 780($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 776($sp) +move $t0, $sp +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 776($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 804($sp) +lw $t0, 776($sp) +lw $a0, 16($t0) +bnez $a0, label_79 +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, 828($sp) +li $t0, 12 +sw $t0, 832($sp) +move $t0, $sp +lw $t1, 832($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 836($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 820($sp) +lw $t0, 828($sp) +lw $t1, 16($t0) +sw $t1, 824($sp) +lw $a0, 820($sp) +lw $t1, 824($sp) +seq $a0, $a0, $t1 +sw $a0, 816($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 812($sp) +move $t0, $sp +lw $t1, 816($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 812($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 840($sp) +lw $t0, 812($sp) +lw $a0, 16($t0) +bnez $a0, label_80 +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, 864($sp) +li $t0, 13 +sw $t0, 868($sp) +move $t0, $sp +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 864($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 872($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 856($sp) +lw $t0, 864($sp) +lw $t1, 16($t0) +sw $t1, 860($sp) +lw $a0, 856($sp) +lw $t1, 860($sp) +seq $a0, $a0, $t1 +sw $a0, 852($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 848($sp) +move $t0, $sp +lw $t1, 852($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 848($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 876($sp) +lw $t0, 848($sp) +lw $a0, 16($t0) +bnez $a0, label_81 +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, 900($sp) +li $t0, 14 +sw $t0, 904($sp) +move $t0, $sp +lw $t1, 904($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 900($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 908($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 892($sp) +lw $t0, 900($sp) +lw $t1, 16($t0) +sw $t1, 896($sp) +lw $a0, 892($sp) +lw $t1, 896($sp) +seq $a0, $a0, $t1 +sw $a0, 888($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 884($sp) +move $t0, $sp +lw $t1, 888($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 884($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 912($sp) +lw $t0, 884($sp) +lw $a0, 16($t0) +bnez $a0, label_82 +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, 936($sp) +li $t0, 15 +sw $t0, 940($sp) +move $t0, $sp +lw $t1, 940($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 944($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 928($sp) +lw $t0, 936($sp) +lw $t1, 16($t0) +sw $t1, 932($sp) +lw $a0, 928($sp) +lw $t1, 932($sp) +seq $a0, $a0, $t1 +sw $a0, 924($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 920($sp) +move $t0, $sp +lw $t1, 924($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 920($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 948($sp) +lw $t0, 920($sp) +lw $a0, 16($t0) +bnez $a0, label_83 +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, 972($sp) +li $t0, 16 +sw $t0, 976($sp) +move $t0, $sp +lw $t1, 976($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 972($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 980($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 964($sp) +lw $t0, 972($sp) +lw $t1, 16($t0) +sw $t1, 968($sp) +lw $a0, 964($sp) +lw $t1, 968($sp) +seq $a0, $a0, $t1 +sw $a0, 960($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 956($sp) +move $t0, $sp +lw $t1, 960($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 956($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 984($sp) +lw $t0, 956($sp) +lw $a0, 16($t0) +bnez $a0, label_84 +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, 1008($sp) +li $t0, 17 +sw $t0, 1012($sp) +move $t0, $sp +lw $t1, 1012($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1008($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1016($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 1000($sp) +lw $t0, 1008($sp) +lw $t1, 16($t0) +sw $t1, 1004($sp) +lw $a0, 1000($sp) +lw $t1, 1004($sp) +seq $a0, $a0, $t1 +sw $a0, 996($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 992($sp) +move $t0, $sp +lw $t1, 996($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 992($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1020($sp) +lw $t0, 992($sp) +lw $a0, 16($t0) +bnez $a0, label_85 +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, 1044($sp) +li $t0, 18 +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 $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 1036($sp) +lw $t0, 1044($sp) +lw $t1, 16($t0) +sw $t1, 1040($sp) +lw $a0, 1036($sp) +lw $t1, 1040($sp) +seq $a0, $a0, $t1 +sw $a0, 1032($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1028($sp) +move $t0, $sp +lw $t1, 1032($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1028($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1056($sp) +lw $t0, 1028($sp) +lw $a0, 16($t0) +bnez $a0, label_86 +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, 1080($sp) +li $t0, 19 +sw $t0, 1084($sp) +move $t0, $sp +lw $t1, 1084($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1080($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1088($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 1072($sp) +lw $t0, 1080($sp) +lw $t1, 16($t0) +sw $t1, 1076($sp) +lw $a0, 1072($sp) +lw $t1, 1076($sp) +seq $a0, $a0, $t1 +sw $a0, 1068($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1064($sp) +move $t0, $sp +lw $t1, 1068($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1064($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1092($sp) +lw $t0, 1064($sp) +lw $a0, 16($t0) +bnez $a0, label_87 +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, 1116($sp) +li $t0, 20 +sw $t0, 1120($sp) +move $t0, $sp +lw $t1, 1120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1124($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 1108($sp) +lw $t0, 1116($sp) +lw $t1, 16($t0) +sw $t1, 1112($sp) +lw $a0, 1108($sp) +lw $t1, 1112($sp) +seq $a0, $a0, $t1 +sw $a0, 1104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1100($sp) +move $t0, $sp +lw $t1, 1104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1128($sp) +lw $t0, 1100($sp) +lw $a0, 16($t0) +bnez $a0, label_88 +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, 1152($sp) +li $t0, 21 +sw $t0, 1156($sp) +move $t0, $sp +lw $t1, 1156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1160($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 1144($sp) +lw $t0, 1152($sp) +lw $t1, 16($t0) +sw $t1, 1148($sp) +lw $a0, 1144($sp) +lw $t1, 1148($sp) +seq $a0, $a0, $t1 +sw $a0, 1140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1136($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1164($sp) +lw $t0, 1136($sp) +lw $a0, 16($t0) +bnez $a0, label_89 +la $t0, s_30 +sw $t0, 1168($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, 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, 1132($sp) +b label_90 +label_89: +la $t0, s_31 +sw $t0, 1180($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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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 +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, 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, 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, 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, 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, 412($sp) +sw $t1, 1432($sp) +lw $a1, 1432($sp) +lw $ra, 0($sp) +addi $sp, $sp, 1440 +jr $ra +CellularAutomaton.prompt: +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, 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, 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, 24($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, 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, 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, 12($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_53 +sw $t0, 40($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, 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, 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, 12($t2) +jal $t3 +sw $a1, 36($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, 20($t2) +jal $t3 +sw $a1, 52($sp) +lw $t1, 52($sp) +sw $t1, 16($sp) +la $t0, s_3 +sw $t0, 64($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, 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, 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, 12($t2) +jal $t3 +sw $a1, 60($sp) +la $t0, s_54 +sw $t0, 96($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, 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, 16($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_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) +li $t0, 1 +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, 76($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, 124($sp) +li $t0, 0 +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 Bool_init +sw $a1, 132($sp) +lw $t1, 124($sp) +sw $t1, 76($sp) +label_112: +lw $t1, 76($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) +lw $ra, 0($sp) +addi $sp, $sp, 144 +jr $ra +CellularAutomaton.prompt2: +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, 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, 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, 24($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, 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, 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, 12($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_56 +sw $t0, 40($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, 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, 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, 12($t2) +jal $t3 +sw $a1, 36($sp) +la $t0, s_57 +sw $t0, 56($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, 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, 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, 12($t2) +jal $t3 +sw $a1, 52($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, 20($t2) +jal $t3 +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +la $t0, s_58 +sw $t0, 96($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, 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, 16($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_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) +li $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, 76($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, 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 Bool_init +sw $a1, 132($sp) +lw $t1, 124($sp) +sw $t1, 76($sp) +label_114: +lw $t1, 76($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) +lw $ra, 0($sp) +addi $sp, $sp, 144 +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, -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, 3 +sw $t1, 0($t0) +la $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 +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, 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 $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, 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, 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, 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, 36($sp) +la $t0, s_60 +sw $t0, 56($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, 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, 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, 52($sp) +label_115: +move $t0, $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, 104($t2) +jal $t3 +sw $a1, 72($sp) +lw $t0, 72($sp) +lw $a0, 16($t0) +bnez $a0, label_116 +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, 76($sp) +li $t0, 1 +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 Bool_init +sw $a1, 84($sp) +lw $t1, 76($sp) +sw $t1, 16($sp) +move $t0, $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, 96($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 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, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal CellularAutomaton_init +sw $a1, 108($sp) +move $t0, $sp +lw $t1, 32($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, 36($t2) +jal $t3 +sw $a1, 100($sp) +lw $t0, 176($sp) +lw $t1, 100($sp) +sw $t1, 32($t0) +lw $t0, 176($sp) +lw $t1, 32($t0) +sw $t1, 164($sp) +move $t0, $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, 40($t2) +jal $t3 +sw $a1, 116($sp) +label_118: +lw $t0, 16($sp) +lw $a0, 16($t0) +bnez $a0, label_119 +b label_120 +label_119: +move $t0, $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, 100($t2) +jal $t3 +sw $a1, 132($sp) +lw $t0, 132($sp) +lw $a0, 16($t0) +bnez $a0, label_121 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +li $t0, 0 +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 Bool_init +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, 176($sp) +lw $t1, 32($t0) +sw $t1, 164($sp) +move $t0, $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, 92($t2) +jal $t3 +sw $a1, 152($sp) +lw $t0, 176($sp) +lw $t1, 32($t0) +sw $t1, 164($sp) +move $t0, $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, 40($t2) +jal $t3 +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, 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, 180 +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..eebbf747 --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,1376 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 Object_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) +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 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, 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, 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 $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, 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, 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, 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, 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 $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) +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 $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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_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, 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, 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, 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, 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, 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, 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, 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, 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) +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, 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, 44($sp) +li $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, 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, 56($sp) +li $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, 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, 68($sp) +li $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, 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, 80($sp) +li $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, 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, 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) +lw $t0, 100($sp) +lw $a0, 16($t0) +bnez $a0, label_4 +b label_5 +label_4: +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, 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: +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/new_complex.mips b/tests/codegen/new_complex.mips new file mode 100644 index 00000000..2e5e30c3 --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,1883 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 16($sp) +li $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, 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, 28($sp) +li $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 $t1, 64($sp) +sw $t1, 56($sp) +lw $t1, 68($sp) +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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_1 +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, 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, 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, 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, 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) +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_3 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 76($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_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, 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, 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, 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, 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, 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, 36($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, 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, 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, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 36($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, 80($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, 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, 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, 80($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 80($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, 36($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, 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, 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, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 36($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, 36($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, 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, 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, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 36($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) +lw $t0, 8($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, 3 +sw $t1, 0($t0) +la $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) +li $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) +lw $t0, 52($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, 3 +sw $t1, 0($t0) +la $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) +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 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) +li $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 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 diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..b205887a --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,1449 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 +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, 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, 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_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, 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, 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) +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) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_2 +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, 108($sp) +li $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, 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, 120($sp) +li $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, 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, 136($sp) +li $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, 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, 168($sp) +li $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, 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, 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) +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 +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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) +lw $t0, 88($sp) +lw $a0, 16($t0) +bnez $a0, label_3 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $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, 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, 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, 228($sp) +li $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, 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, 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, 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, 244($sp) +li $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) +li $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 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) +li $t0, 1 +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, 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, 16($sp) +li $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, 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, 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, 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, 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) +lw $t0, 56($sp) +lw $a0, 16($t0) +bnez $a0, label_7 +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, 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, 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, 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, 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..1983e81f --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,1602 @@ +.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 "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 +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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, -540 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +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, 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, 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 +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, 24($sp) +li $t0, 2 +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, 544($sp) +lw $t1, 24($sp) +sw $t1, 16($t0) +lw $t0, 544($sp) +lw $t1, 16($t0) +sw $t1, 464($sp) +lw $t0, 544($sp) +lw $t1, 464($sp) +sw $t1, 20($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, 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) +li $t0, 0 +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 $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, 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, 52($sp) +li $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) +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 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, 508($sp) +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, 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, 508($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, 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, 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) +lw $t0, 544($sp) +lw $t1, 80($sp) +sw $t1, 20($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, 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, 2 +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, 544($sp) +lw $t1, 120($sp) +sw $t1, 24($t0) +label_4: +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 508($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 428($sp) +lw $t0, 544($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) +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 +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, 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, 188($sp) +lw $t0, 508($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, 508($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 428($sp) +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 508($sp) +lw $t0, 544($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) +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, 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, 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, 428($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, 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, 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, 508($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, 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, 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, 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, 292($sp) +li $t0, 0 +sw $t0, 296($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) +li $t0, 1 +sw $t0, 312($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) +li $t0, 0 +sw $t0, 324($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) +li $t0, 0 +sw $t0, 336($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, 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, 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) +li $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, 428($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, 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, 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, 508($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 428($sp) +lw $t0, 544($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) +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, 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, 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, 508($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, 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, 440($sp) +li $t0, 0 +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, 384($sp) +b label_12 +label_11: +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 508($sp) +lw $t0, 544($sp) +lw $t1, 508($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, 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, 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, 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, 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, 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, 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, 548 +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, 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, 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 $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 new file mode 100644 index 00000000..15e04282 --- /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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 28($sp) +li $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, 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, 40($sp) +li $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, 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, 72($sp) +li $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, 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, 84($sp) +li $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, 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, 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/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..16386dea --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,1913 @@ +.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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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) +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 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, 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, 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, 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, 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 $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) +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 $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, 52($sp) +lw $t0, 72($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) +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) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, 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, 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, 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, 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) +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 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) +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 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, 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, 16($sp) +li $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) +lw $t0, 36($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, 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, 116($sp) +move $t0, $sp +lw $t1, 116($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, 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, 92($sp) +li $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, 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, 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: +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, 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, 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 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